package Comparetor;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

/*
函数式接口作为方法的返回值
定义一个类（ComparatorDemo):在类中提供两个方法
   一个方法是:Comparator<String> getComparator()  方法返回值Comparator是一个函数式接口
   一个是主方法，在主方法中调用getComparator方法
 */
public class ComparatorDemo {
    public static void main(String[] args) {
//构造使用的场景

        //定义集合存储字符串元素
        ArrayList<String>array=new ArrayList<String>();
        //存储字符串
        array.add("cccc");
        array.add("aa");
        array.add("b");
        array.add("ddd");
        getComparator();

        System.out.println("排序前"+array);

        //对集合中字符串进行排序
//        Collections.sort(array);//按照自然排序
        //运用比较器按长度进行排序
          Collections.sort(array,getComparator());//第二个返回的是Comparator(接口的实现类对象)

        System.out.println("排序后"+array);

    }

    private static Comparator<String> getComparator() {
        //返回Comparator(比较器排序的接口)该接口实现类对象
        //采用匿名内部类方法实现
//        Comparator<String>comp=new Comparator<String>() {
//            @Override
//            public int compare(String s1, String s2) {
//                return s1.length()-s2.length();
//            }
//        };
//        return comp;
//
//        return new Comparator<String>() {
//            @Override
//            public int compare(String s1, String s2) {
//                return s1.length() - s2.length();
//            }
//        };

        //Lambda表达式
//        return (String s1,String s2)->{
//            return s1.length()-s2.length();
//        };

        return (s1,s2)->s1.length()-s2.length();
    }
}
